package satk.beans.view;

import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.DataModel;
import satk.objetos.Usuario;

/**
 * <h3>AdminUsuariosBean.java</h3>
 * <div><em>Fecha de creación: 2/05/2011, 12:09:30 PM.</em></div>
 * <p></p>
 * @author Sergio Flores Genis <sf.cancun@gmail.com>
 */
@ManagedBean
@ViewScoped
public class AdminUsuariosBean
        extends satk.beans.ProcessDataBase<Usuario>
        implements Serializable {

    private DataModel<Usuario> dataModel = null;
    private Usuario newUsuario = null;

    public AdminUsuariosBean() {
        super(new satk.database.ManagerUsuarios().getAll());
        this.dataModel = new javax.faces.model.ListDataModel<Usuario>(getLista());
        newUsuario = new Usuario();
    }

    public DataModel<Usuario> getDataModel() {
        return dataModel;
    }

    public Usuario getNewUsuario() {
        return newUsuario;
    }

    @Override
    public String add(Usuario e) {
        throw new UnsupportedOperationException("Inplementado en AddUsuarioBeans");
    }

    @Override
    public String edit(Usuario o, Usuario n) {
        resultError = false;
        try {
            resultCode = new satk.database.ManagerUsuarios().update(o, n);
            resultMessage = n.getNombreUsuario() + " actualizado exitosamente.";
        } catch (java.sql.SQLIntegrityConstraintViolationException ex) {
            Logger.getLogger(AdminUsuariosBean.class.getName()).log(Level.SEVERE,
                    "Usuario con el mismo nombre", ex);
            resultCode = ex.getErrorCode();
            resultMessage = "Ya existe un usuario con este nombre";
            resultError = true;
            n = (Usuario) o.clon();
        } catch (java.sql.SQLException ex) {
            Logger.getLogger(AdminUsuariosBean.class.getName()).log(Level.SEVERE,
                    "Error al editar usuario", ex);
            resultCode = ex.getErrorCode();
            resultMessage = ex.getSQLState() + " " + ex.getMessage();
            resultError = true;
            n = (Usuario) o.clon();
        }
        result = true;
        return null;
    }

    @Override
    public String del(Usuario e) {
        resultError = false;
        try {
            resultCode = new satk.database.ManagerUsuarios().remove(e);
            resultMessage = e.getNombreUsuario() + " ha sido eliminado";
            getLista().remove(e);
        } catch (java.sql.SQLIntegrityConstraintViolationException ex) {
            Logger.getLogger(AdminUsuariosBean.class.getName()).log(Level.SEVERE,
                    "Usuario inexistente", ex);
            resultCode = ex.getErrorCode();
            resultMessage = "No existe un usuario con este nombre";
            resultError = true;
        } catch (java.sql.SQLException ex) {
            Logger.getLogger(AdminUsuariosBean.class.getName()).log(Level.SEVERE,
                    "Error al eliminar usuario", ex);
            resultCode = ex.getErrorCode();
            resultMessage = ex.getSQLState() + " " + ex.getMessage();
            resultError = true;
        }
        result = true;
        return null;
    }

    @Override
    public String actionSaveEdit(Usuario e) {
        int id = e.getIdentificador().intValue();
        if (isBeingEdited(id)) {
            edit(getCtrlEdit().get(id), e);
            actionCancelEdit(id);
        }
        return null;
    }

    /** <h1>No soportado</h1> */
    @Override
    public String actionSaveEditAll() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /** <h1>No soportado</h1> */
    @Override
    public String actionSaveRemove(Usuario e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /** <h1>No soportado</h1> */
    @Override
    public String actionSaveRemoveAll() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
